/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hu.tozo.service;

/**
 *
 * @author tozo Feladata, hogy megkeresse a szabad eroforrasokat es inditson
 * vagy leallitson szukseg eseten. Nem gondolkodik, csak inditja az elso szabad
 * gepet a listaban. Ha leallitas a feladat akkor az elso futo gepet fogja
 * leallitani. Mindig ugy indul a folyamat, hogy kilistazza a gepeket.
 */
public class ClusterController {


    EC2Service ec2;
    GlassfishService gs;

    public ClusterController() throws Exception {
        ec2 = new EC2Service();
        gs  = new GlassfishService();
    }

    /**
     * Feladata: Inditson el egy amazon instance-ot. Inditsa el a hozza tartozo
     * GF node-ot. Ha minden elindult akkor az ip cim frissitest is meg kell csinalni
     * mielott a glassfish node-ot elinditjuk.
     *
     * Mukodes:
     *   1.Indítson el egy node-ot ha van még mit indítani.
     *   1.a Ha nins akkor adjon vissza valami exception-t
     *   1.b Ha van akkor indítsa el és listazza az instansok statusat
     *   2. Poolozni kell a statusokat és ha már elindult akkor lépjen tovább
     *   3. Frissítse az ip cimet
     *   4. Indítsa el a node-ot
     */
    public void startNode() throws Exception {
        String instanceId = ec2.getFirstStopedInstance();
        if(instanceId.equals("")){
            throw new RuntimeException("Nincs több futtatható példány");
        }
        ec2.startInstance(instanceId);
        for(int i=0;i<2;i++){
            Thread.sleep(20000);
            int state = ec2.getInstanceState(instanceId);
            if(state == 16){
                String nodeName = ec2.getConvertInstanceId2NodeName(instanceId);
                gs.refreshNodeIpAddress(nodeName);
                String shortName="";
                if(nodeName.equals("node1")){shortName="n1";}
                if(nodeName.equals("node2")){shortName="n2";}
                if(nodeName.equals("node3")){shortName="n3";}
                if(nodeName.equals("node4")){shortName="n4";}
                gs.startNode(shortName);
                break;
            }else{
                System.out.println("Nem indult el az:"+i+"próbálkozásra.");
            }
        }
    }

    /**
     * Feladata: Allitson le egy amazon instansot. Allitsa le a hozza tartozo
     * node-ot szabalyosan.
     *
     * Mukodes: Listazza ki, hogy milyen instansok vannak. Jelenleg 4 instance
     * mukodik, a lista alapjan latszik, melyik fut. Leallitani csak akkor lehet
     * ha running allapotban van egy gep.
     */
    public void stopNode() throws Exception {
        String instanceId = ec2.getFirstRunningInstance();
        if(instanceId.equals("")){
            throw new RuntimeException("Nincs több leállítható példány");
        }
        String nodeName = ec2.getConvertInstanceId2NodeName(instanceId);
        String shortName="";
        if(nodeName.equals("node1")){shortName="n1";}
        if(nodeName.equals("node2")){shortName="n2";}
        if(nodeName.equals("node3")){shortName="n3";}
        if(nodeName.equals("node4")){shortName="n4";}
        gs.stopNode(shortName);        
        ec2.stopInstance(instanceId);
    }

}
